package pwd.allen.behavior.chainOfResponsibility;

/**
 * @author 门那粒沙
 * @create 2019-05-22 23:01
 **/
public abstract class Handler {

    //下一任处理者
    protected Handler next;

    public void setNext(Handler next) {
        this.next = next;
    }

    /**
     * 网上的写法，但我觉得有些公共的方法可以抽出来放在抽象handler里，比如转到下一个处理器的逻辑
     * @param request
     */
//    public abstract void execute(Request request);

    /**
     * 自己对原来的方法进行调整，不知道对不对
     * 约定：如果希望请求传给下一个处理器，则直接返回Request对象；否则返回null
     *
     * @param request
     * @return
     */
    public abstract Request doExecute(Request request);

    public void execute(Request request) {
        if (doExecute(request) != null && this.next != null) {
            next.execute(request);
        }
    }
}
